/*******************************************************************************
 *
 * MoteNav - multimodal interface for WWJ
 * =================================
 *
 * Copyright (C) 2008 by Giampaolo Melis
 * Project home page: http://code.google.com/p/motenav/
 *
 *******************************************************************************
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 ******************************************************************************/
/*
 * BookmarkPanel.java
 *
 * Created on 10 luglio 2008, 22.35
 */
package com.bwepow.wgapp.wwj.gui;

import gov.nasa.worldwind.WorldWind;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import org.jdesktop.observablecollections.ObservableList;
import org.jdesktop.observablecollections.ObservableCollections;

/**
 *
 * @author Giampaolo Melis
 */
public class BookmarkPanel extends javax.swing.JPanel {

    /** Creates new form BookmarkPanel */
    public BookmarkPanel() {
        initComponents();
    }

    public ObservableList<PositionBean> getBookmarks() {
        return bookmarks;
    }

    public PositionBean getCurrentPositionBean() {
        return currentPositionBean;
    }

    private void grabPosition() {
        grabPosition(currentPositionBean.getBookmarkName());
    }
    
    public void grabNewPosition() {
        String positions = "one | two | three | four | five | six | seven | eight | nine";
        String posArr[] = positions.split(" \\| ");
        int pos = 0;
        int len = posArr.length;
        PositionBean pb = null;
        boolean found = true;
        while (found && pos < len) {
            pb = new PositionBean();
            System.out.println("Search: " + posArr[pos]);
            pb.setBookmarkName(posArr[pos++]);
            found = bookmarks.contains(pb);
        }
        System.out.println("Bookmark: " + found);
        if (!found) {
            grabPosition(posArr[pos-1]);
        }
    }
    
    private void grabPosition(String name) {
        PositionBean pos = new PositionBean();
        pos.setBookmarkName(name);

        int idx = bookmarks.indexOf(pos);

        if (idx >= 0) {
            pos = bookmarks.get(idx);
        } else {
            bookmarks.add(pos);
        }

        pos.setLatitude(currentPositionBean.getLatitude());
        pos.setLongitude(currentPositionBean.getLongitude());
        pos.setAltitude(currentPositionBean.getAltitude());
        pos.setPitch(currentPositionBean.getPitch());
        pos.setHeading(currentPositionBean.getHeading());
        pos.setZoom(currentPositionBean.getZoom());
    }

    private void removeBookmark() {
        PositionBean pos = new PositionBean();
        pos.setBookmarkName(bookmarkNameText.getText());
        bookmarks.remove(pos);
    }

    public PositionBean getSelectedBookmark() {
        return selectedBookmark;
    }

    public void setSelectedBookmark(PositionBean selectedBookmark) {
        PositionBean old = this.selectedBookmark;
        this.selectedBookmark = selectedBookmark;
        if (selectedBookmark != null)
            currentPositionBean.setBookmarkName(selectedBookmark.getBookmarkName());
        firePropertyChange("selectedBookmark", old, selectedBookmark);
    }

    public void removeActionListener(ActionListener l) {
        flyToButton.removeActionListener(l);
    }

    public void addActionListener(ActionListener l) {
        flyToButton.addActionListener(l);
    }

    public JButton getSrButton() {
        return srButton;
    }

    public JButton getMcButton() {
        return mcButton;
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {
        bindingGroup = new org.jdesktop.beansbinding.BindingGroup();

        currentPositionBean = new com.bwepow.wgapp.wwj.gui.PositionBean();
        featuresPanel = new javax.swing.JPanel();
        networkCheckBox = new javax.swing.JCheckBox();
        srButton = new javax.swing.JButton();
        mcButton = new javax.swing.JButton();
        mainPanel = new javax.swing.JPanel();
        tableTitleLabel = new javax.swing.JLabel();
        tableScrollPane = new javax.swing.JScrollPane();
        bookmarksTable = new javax.swing.JTable();
        grabButton = new javax.swing.JButton();
        bookmarkNameLabel = new javax.swing.JLabel();
        bookmarkNameText = new javax.swing.JTextField();
        removeButton = new javax.swing.JButton();
        flyToButton = new javax.swing.JButton();
        LatLonLabel = new javax.swing.JLabel();
        altitudeLabel = new javax.swing.JLabel();
        pitchHeadingLabel = new javax.swing.JLabel();
        zoomLabel = new javax.swing.JLabel();
        latitudeText = new javax.swing.JFormattedTextField();
        longitudeText = new javax.swing.JFormattedTextField();
        altitudeText = new javax.swing.JFormattedTextField();
        pitchText = new javax.swing.JFormattedTextField();
        headingText = new javax.swing.JFormattedTextField();
        zoomText = new javax.swing.JFormattedTextField();

        setLayout(new java.awt.BorderLayout());

        featuresPanel.setBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createEmptyBorder(8, 8, 8, 8), javax.swing.BorderFactory.createTitledBorder("Features")));
        featuresPanel.setPreferredSize(new java.awt.Dimension(100, 75));

        networkCheckBox.setText("Use Network");
        networkCheckBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                networkCheckBoxActionPerformed(evt);
            }
        });

        srButton.setFont(new java.awt.Font("Tahoma", 0, 9)); // NOI18N
        srButton.setText("SR");
        srButton.setToolTipText("Start speech recognition");
        srButton.setMaximumSize(new java.awt.Dimension(38, 19));

        mcButton.setFont(new java.awt.Font("Tahoma", 0, 9)); // NOI18N
        mcButton.setText("MC");
        mcButton.setToolTipText("Start wiimote connection");

        javax.swing.GroupLayout featuresPanelLayout = new javax.swing.GroupLayout(featuresPanel);
        featuresPanel.setLayout(featuresPanelLayout);
        featuresPanelLayout.setHorizontalGroup(
            featuresPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(featuresPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(networkCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 63, Short.MAX_VALUE)
                .addComponent(mcButton, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(srButton, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        featuresPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {mcButton, srButton});

        featuresPanelLayout.setVerticalGroup(
            featuresPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(featuresPanelLayout.createSequentialGroup()
                .addGroup(featuresPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(networkCheckBox)
                    .addComponent(srButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(mcButton))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        add(featuresPanel, java.awt.BorderLayout.NORTH);

        mainPanel.setBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createEmptyBorder(8, 8, 8, 8), javax.swing.BorderFactory.createTitledBorder("Bookmarks")));

        tableTitleLabel.setText("Saved");

        bookmarksTable.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));

        org.jdesktop.beansbinding.ELProperty eLProperty = org.jdesktop.beansbinding.ELProperty.create("${bookmarks}");
        org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, eLProperty, bookmarksTable, "bookmarksBind");
        org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${bookmarkName}"));
        columnBinding.setColumnName("Bookmark Name");
        columnBinding.setColumnClass(String.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${latitude}"));
        columnBinding.setColumnName("Latitude");
        columnBinding.setColumnClass(Double.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${longitude}"));
        columnBinding.setColumnName("Longitude");
        columnBinding.setColumnClass(Double.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${altitude}"));
        columnBinding.setColumnName("Altitude");
        columnBinding.setColumnClass(Double.class);
        bindingGroup.addBinding(jTableBinding);
        jTableBinding.bind();org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${selectedBookmark}"), bookmarksTable, org.jdesktop.beansbinding.BeanProperty.create("selectedElement"));
        bindingGroup.addBinding(binding);

        tableScrollPane.setViewportView(bookmarksTable);

        grabButton.setText("Grab");
        grabButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                grabButtonActionPerformed(evt);
            }
        });

        bookmarkNameLabel.setText("Name");

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, currentPositionBean, org.jdesktop.beansbinding.ELProperty.create("${bookmarkName}"), bookmarkNameText, org.jdesktop.beansbinding.BeanProperty.create("text"), "bkNameBind");
        binding.setSourceNullValue("Unnamed");
        binding.setSourceUnreadableValue("Unnamed");
        bindingGroup.addBinding(binding);

        removeButton.setText("Remove");

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, bookmarksTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement != null}"), removeButton, org.jdesktop.beansbinding.BeanProperty.create("enabled"));
        bindingGroup.addBinding(binding);

        removeButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                removeButtonActionPerformed(evt);
            }
        });

        flyToButton.setText("Fly To");

        LatLonLabel.setText("Lat / Lon");
        LatLonLabel.setToolTipText("Latitude / Longitude");

        altitudeLabel.setText("Altitude");

        pitchHeadingLabel.setText("Pitch / Head");
        pitchHeadingLabel.setToolTipText("Pitch / Heading");

        zoomLabel.setText("Zoom");
        zoomLabel.setToolTipText("Pitch / Heading");

        latitudeText.setEditable(false);
        latitudeText.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("0.0000000"))));

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, currentPositionBean, org.jdesktop.beansbinding.ELProperty.create("${latitude}"), latitudeText, org.jdesktop.beansbinding.BeanProperty.create("value"), "latitudeBinding");
        bindingGroup.addBinding(binding);

        longitudeText.setEditable(false);
        longitudeText.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("0.0000000"))));

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, currentPositionBean, org.jdesktop.beansbinding.ELProperty.create("${longitude}"), longitudeText, org.jdesktop.beansbinding.BeanProperty.create("value"), "longitudeBinding");
        bindingGroup.addBinding(binding);

        altitudeText.setEditable(false);
        altitudeText.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("0.000000000000"))));

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, currentPositionBean, org.jdesktop.beansbinding.ELProperty.create("${altitude}"), altitudeText, org.jdesktop.beansbinding.BeanProperty.create("value"), "altitudeBinding");
        bindingGroup.addBinding(binding);

        pitchText.setEditable(false);
        pitchText.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("0.0000000"))));

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, currentPositionBean, org.jdesktop.beansbinding.ELProperty.create("${pitch}"), pitchText, org.jdesktop.beansbinding.BeanProperty.create("value"), "pitchBinding");
        bindingGroup.addBinding(binding);

        headingText.setEditable(false);
        headingText.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("0.0000000"))));

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, currentPositionBean, org.jdesktop.beansbinding.ELProperty.create("${heading}"), headingText, org.jdesktop.beansbinding.BeanProperty.create("value"), "headingBinding");
        bindingGroup.addBinding(binding);

        zoomText.setEditable(false);
        zoomText.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("0.000000000000"))));

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, currentPositionBean, org.jdesktop.beansbinding.ELProperty.create("${zoom}"), zoomText, org.jdesktop.beansbinding.BeanProperty.create("value"), "zoomBinding");
        bindingGroup.addBinding(binding);

        javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
        mainPanel.setLayout(mainPanelLayout);
        mainPanelLayout.setHorizontalGroup(
            mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(tableScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 226, Short.MAX_VALUE)
                    .addComponent(removeButton)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, mainPanelLayout.createSequentialGroup()
                        .addComponent(flyToButton)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(bookmarkNameLabel)
                            .addComponent(bookmarkNameText, javax.swing.GroupLayout.DEFAULT_SIZE, 159, Short.MAX_VALUE)))
                    .addGroup(mainPanelLayout.createSequentialGroup()
                        .addComponent(tableTitleLabel)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 141, Short.MAX_VALUE)
                        .addComponent(grabButton))
                    .addGroup(mainPanelLayout.createSequentialGroup()
                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(LatLonLabel)
                            .addComponent(altitudeLabel)
                            .addComponent(pitchHeadingLabel)
                            .addComponent(zoomLabel))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 12, Short.MAX_VALUE)
                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addComponent(zoomText)
                            .addGroup(mainPanelLayout.createSequentialGroup()
                                .addComponent(pitchText)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(headingText, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(altitudeText)
                            .addGroup(mainPanelLayout.createSequentialGroup()
                                .addComponent(latitudeText, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(longitudeText, javax.swing.GroupLayout.PREFERRED_SIZE, 63, javax.swing.GroupLayout.PREFERRED_SIZE)))))
                .addContainerGap())
        );

        mainPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {latitudeText, longitudeText});

        mainPanelLayout.setVerticalGroup(
            mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(mainPanelLayout.createSequentialGroup()
                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(LatLonLabel)
                    .addComponent(longitudeText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(latitudeText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(altitudeLabel)
                    .addComponent(altitudeText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(pitchHeadingLabel)
                    .addComponent(headingText, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(pitchText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(zoomLabel)
                    .addComponent(zoomText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(grabButton)
                    .addComponent(tableTitleLabel))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(tableScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 96, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(removeButton)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(bookmarkNameLabel)
                .addGap(1, 1, 1)
                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(bookmarkNameText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(flyToButton))
                .addContainerGap())
        );

        add(mainPanel, java.awt.BorderLayout.CENTER);

        bindingGroup.bind();
    }// </editor-fold>//GEN-END:initComponents

private void grabButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_grabButtonActionPerformed
    grabPosition();
}//GEN-LAST:event_grabButtonActionPerformed

private void removeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeButtonActionPerformed
    removeBookmark();
}//GEN-LAST:event_removeButtonActionPerformed

private void networkCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_networkCheckBoxActionPerformed
    boolean selected = networkCheckBox.isSelected();
    System.out.println("SELECTED: " + selected);
    WorldWind.getNetworkStatus().setOfflineMode(!selected);
}//GEN-LAST:event_networkCheckBoxActionPerformed

    private PositionBean selectedBookmark;

    private ObservableList<PositionBean> bookmarks = ObservableCollections.observableList(StaticData.getBOOKMARKS());
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel LatLonLabel;
    private javax.swing.JLabel altitudeLabel;
    private javax.swing.JFormattedTextField altitudeText;
    private javax.swing.JLabel bookmarkNameLabel;
    private javax.swing.JTextField bookmarkNameText;
    private javax.swing.JTable bookmarksTable;
    private com.bwepow.wgapp.wwj.gui.PositionBean currentPositionBean;
    private javax.swing.JPanel featuresPanel;
    private javax.swing.JButton flyToButton;
    private javax.swing.JButton grabButton;
    private javax.swing.JFormattedTextField headingText;
    private javax.swing.JFormattedTextField latitudeText;
    private javax.swing.JFormattedTextField longitudeText;
    private javax.swing.JPanel mainPanel;
    private javax.swing.JButton mcButton;
    private javax.swing.JCheckBox networkCheckBox;
    private javax.swing.JLabel pitchHeadingLabel;
    private javax.swing.JFormattedTextField pitchText;
    private javax.swing.JButton removeButton;
    private javax.swing.JButton srButton;
    private javax.swing.JScrollPane tableScrollPane;
    private javax.swing.JLabel tableTitleLabel;
    private javax.swing.JLabel zoomLabel;
    private javax.swing.JFormattedTextField zoomText;
    private org.jdesktop.beansbinding.BindingGroup bindingGroup;
    // End of variables declaration//GEN-END:variables

}
